iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 21
0

Day 21 Collect Log with Filebeat-2


前言

昨天我們講解了什麼是FileBeat,以及如何使用FileBeat,蒐集我們昨天提供的nginx access logs以及error logs。今天我們進一步講解,當透過FileBeat Listen後,如何蒐集Log,以及蒐集後會如何建構以及應用。

FileBeat蒐集Logs

昨天我們講解到透過 filebeat.ext -e 去啟動後,你會發現cmd視窗會停留在它啟動後的介面,並且有一堆文字跑出來。按照昨天的設計,我們會蒐集在D:/nginx裡面的logs,因此這個意思就是它的設定已經完備,並且正在監聽中。若你本來裡面就有存放Log,它就會開始將這些log上傳。

接著我們檢視一下elasticsearch中的index

透過 _cat/indices 我們可以檢視目前的所有indices

可以看到如下圖,出現一個filebeat開頭的index,而這就是剛剛我們監聽後上傳建立的,後面會是你建構當天的日期,而這部分其實是可以隨著你每天上傳按天建立index。

接著我們可以看一下裡面的內容,你會發現昨天那樣的格式,會透過filebeat中預設的module去parse,parse成固定的格式,而像是ip這種,就會變建構成是elasticsearch中ip的type mapping。

以下是其中一個nginx access log parse以後的範例。

 {
                "_index": "filebeat-7.9.1-2020.09.26-000001",
                "_type": "_doc",
                "_id": "rxCDyHQBY_yROqwhvmiM",
                "_score": 1.0,
                "_source": {
                    "agent": {
                        "hostname": "LAPTOP-MF7528EO",
                        "name": "LAPTOP-MF7528EO",
                        "id": "184d5cf6-3b5d-4bf2-8747-c8bfeba52d42",
                        "type": "filebeat",
                        "ephemeral_id": "e0b2ad1d-f970-4006-b871-27d346294ede",
                        "version": "7.9.1"
                    },
                    "nginx": {
                        "access": {
                            "remote_ip_list": [
                                "10.191.100.120"
                            ]
                        }
                    },
                    "log": {
                        "file": {
                            "path": "d:\\nginx\\access.log-20200916"
                        },
                        "offset": 3422
                    },
                    "source": {
                        "address": "10.191.100.120",
                        "ip": "10.191.100.120"
                    },
                    "fileset": {
                        "name": "access"
                    },
                    "url": {
                        "original": "/software"
                    },
                    "input": {
                        "type": "log"
                    },
                    "@timestamp": "2020-09-15T07:27:18.000Z",
                    "ecs": {
                        "version": "1.5.0"
                    },
                    "related": {
                        "ip": [
                            "10.191.100.120"
                        ]
                    },
                    "service": {
                        "type": "nginx"
                    },
                    "host": {
                        "hostname": "LAPTOP-MF7528EO",
                        "os": {
                            "build": "18362.1082",
                            "kernel": "10.0.18362.1082 (WinBuild.160101.0800)",
                            "name": "Windows 10 Home",
                            "family": "windows",
                            "version": "10.0",
                            "platform": "windows"
                        },
                        "ip": [
                            "fe80::e162:91cb:77a1:f325",
                            "169.254.243.37",
                            "fe80::99a5:fa82:c931:8fb4",
                            "192.168.99.1",
                            "fe80::34fd:84f7:c91f:5da5",
                            "169.254.93.165",
                            "fe80::344f:84b5:2b0a:e515",
                            "169.254.229.21",
                            "2001:b400:e203:361d:c86:26ba:ebc1:7594",
                            "2001:b400:e203:361d:39f4:6a4:8631:97d4",
                            "fe80::c86:26ba:ebc1:7594",
                            "172.20.10.2",
                            "fe80::f480:aacb:2042:8b9b",
                            "172.20.10.4",
                            "fe80::a1b3:725b:996e:7f19",
                            "169.254.127.25"
                        ],
                        "name": "LAPTOP-MF7528EO",
                        "id": "4b60979b-7b54-4911-b8ba-c81d2b2ecb00",
                        "mac": [
                            "00:19:21:aa:aa:aa",
                            "0a:00:27:00:00:05",
                            "c0:b6:f9:11:e3:66",
                            "c2:b6:f9:11:e3:65",
                            "92:8c:43:84:9f:ca",
                            "c0:b6:f9:11:e3:65",
                            "c0:b6:f9:11:e3:69"
                        ],
                        "architecture": "x86_64"
                    },
                    "http": {
                        "request": {
                            "method": "GET"
                        },
                        "response": {
                            "status_code": 200,
                            "body": {
                                "bytes": 492675
                            }
                        },
                        "version": "1.1"
                    },
                    "event": {
                        "timezone": "+08:00",
                        "created": "2020-09-26T03:45:09.165Z",
                        "kind": "event",
                        "module": "nginx",
                        "category": [
                            "web"
                        ],
                        "type": [
                            "access"
                        ],
                        "dataset": "nginx.access",
                        "outcome": "success"
                    },
                    "user_agent": {
                        "original": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36",
                        "os": {
                            "name": "Windows",
                            "version": "10",
                            "full": "Windows 10"
                        },
                        "name": "Chrome",
                        "device": {
                            "name": "Other"
                        },
                        "version": "84.0.4147.125"
                    }
                }
            }

可以看到它將其中的拜訪IP、名稱、UserAgent,以及拜訪節點等等都解析出來,而這些解析出來的欄位,我們就可以應用在查詢以及視覺化上。

這邊也提到一下,當這樣子透過filebeat setup後,你可以看一下Kibana上的Dashboard區,你會發現多了很多預設的Dashboard,如下圖:

其中我們找到我們預設的nginx module,點開後就可以看到剛剛丟進去的資料,已經被視覺化到Dashboard上。

這邊記得右上角要filter時間範圍是在上傳的log時間內,否則就不會有資料顯示喔!

如此一來,大致上我們就知道一整套流程,也就是一開始說的,透過filebeat(logstash)等等 接著可以透過logstash去正規化log,存到elasticsearch上,接著可以用來查詢;Kibana也能應用這個資訊去進行視覺化。

後記

今天我們把昨天一套簡單的透過filebeat上傳的流程講解完,初步讓大家有個概念,接著我們就會透過docker-compose去實作整套,並且在這過程中會提到不同狀況的調整(例如多種Log時要如何設定filebeat,以及按照日期拆分)又或者是自生成(非屬於各項default)log的時候該如何解析


上一篇
Day 20 Collect Log with Filebeat
下一篇
Day 22 Docker nginx container with filebeat
系列文
親愛的,我把ElasticSearch上雲了30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言